﻿using System;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Extensions.DependencyInjection;
using RotovapPlatform.Domain.Equipment.Interfaces.Services;
using System.Threading.Tasks;

namespace RotovapPlatform.UI.Views.DeviceMaintenance
{
	/// <summary>
	/// ManualOperationView.xaml 的交互逻辑
	/// </summary>
	public partial class ManualOperationView : UserControl
	{
		private readonly IDeviceStatusService _deviceStatusService;

		public ManualOperationView()
		{
			InitializeComponent();

			// 获取设备状态服务
			_deviceStatusService = App.ServiceProvider.GetRequiredService<IDeviceStatusService>();

			// 注册加载和卸载事件
			Loaded += ManualOperationView_Loaded;
			Unloaded += ManualOperationView_Unloaded;
		}

		private async void ManualOperationView_Loaded(object sender, RoutedEventArgs e)
		{
			try
			{
				// 检查设备状态监控服务是否已启动，如果未启动才启动它
				// 不再停止后重启，避免连接丢失
				//await _deviceStatusService.StartMonitoringAsync();

				Console.WriteLine("ManualOperationView加载完成，设备状态监控已确认启动");

				// 注册一个简单的回调以保持状态更新活动
				_deviceStatusService.RegisterStatusCallback(KeepAliveCallback);
			}
			catch (Exception ex)
			{
				Console.WriteLine($"手动操作视图加载时启动设备状态监控失败: {ex.Message}");
			}
		}

		// 简单的保活回调，确保状态监控有活动
		private async Task KeepAliveCallback(string deviceId, object status)
		{
			// 这个回调什么都不做，只是为了保持状态监控活动
			await Task.CompletedTask;
		}

		private void ManualOperationView_Unloaded(object sender, RoutedEventArgs e)
		{
			// 当视图卸载时不要停止设备状态监控，因为其他视图可能仍需要它
			// 设备状态监控生命周期应该由应用程序管理，而不是单个视图
			Console.WriteLine("ManualOperationView已卸载");
		}
	}
}
